﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objetos;
using Onshi.POS.Vendedores;
using Onshi.POS.Vendedores.Vistas;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class VendedoresAltaModificacion : FormularioBase, IVendedoresAltaModificacion
    {
        #region Constructores

        public VendedoresAltaModificacion()
        {
            InitializeComponent();
            presentador = new VendedoresAltaModificacionPresentador(this);
            Text = "Alta de vendedor";
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.ALTA;
        }

        public VendedoresAltaModificacion(Int32 idVendedor)
            : this()
        {
            Text = "Modificación de vendedor";
            this.idVendedor = idVendedor;
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION;
        }

        #endregion

        #region Atributos

        private Int32 idVendedor;
        private EnumEstadoAltaBajaModificacionHabilitacion estadoAbm;
        private VendedoresAltaModificacionPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 IdVendedor
        {
            get { return idVendedor; }
            set { idVendedor = value; }
        }

        public Int32 IdRubroVendedor
        {
            get { return (Int32)ucRubroVendedor.cboRubrosVendedores.SelectedValue; }
            set { ucRubroVendedor.cboRubrosVendedores.SelectedValue = value; }
        }

        public Byte IdTipoComisionVendedor
        {
            get { return (Byte)cboTipoComisionVendedor.SelectedValue; }
            set { cboTipoComisionVendedor.SelectedValue = value; }
        }

        public Byte IdTipoMensajeriaInstantanea
        {
            get { return (Byte)cboTipoMensajeriaInstantanea.SelectedValue; }
            set { cboTipoMensajeriaInstantanea.SelectedValue = value; }
        }

        public String Codigo
        {
            get { return txtCodigo.Text; }
            set { txtCodigo.Text = value; }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
            set { txtNombre.Text = value; }
        }

        public String Cuit
        {
            get { return mskCuit.Text; }
            set { mskCuit.Text = value; }
        }

        public Decimal Comision
        {
            get { return numComision.Value; }
            set { numComision.Value = value; }
        }

        public Decimal ComisionMaxima
        {
            get { return numComisionMaxima.Value; }
            set { numComisionMaxima.Value = value; }
        }

        public String Email
        {
            get { return txtEmail.Text; }
            set { txtEmail.Text = value; }
        }

        public String SitioWeb
        {
            get { return txtSitioWeb.Text; }
            set { txtSitioWeb.Text = value; }
        }

        public String MensajeriaInstantanea
        {
            get { return txtMensajeriaInstantanea.Text; }
            set { txtSitioWeb.Text = value; }
        }

        public Image Imagen
        {
            get { return picImagen.Image; }
            set { picImagen.Image = value; }
        }

        public String Observacion
        {
            get { return txtObservacion.Text; }
            set { txtObservacion.Text = value; }
        }

        public List<DomicilioVendedor> ListaDomicilios
        {
            get { return (List<DomicilioVendedor>)bsDomicilios.DataSource; }
            set { bsDomicilios.DataSource = value; }
        }

        public List<TelefonoVendedor> ListaTelefonos
        {
            get { return (List<TelefonoVendedor>)bsTelefonos.DataSource; }
            set { bsTelefonos.DataSource = value; }
        }

        public EnumEstadoAltaBajaModificacionHabilitacion EstadoABM
        {
            get { return estadoAbm; }
        }

        #endregion

        #region Eventos

        private void btnVerObservacionDomicilio_Click(Object sender, EventArgs e)
        {
            if (bsDomicilios.Current != null)
            {
                var domicilio = ((Domicilio)bsDomicilios.Current);
                if (domicilio.TieneObservacion)
                {
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.DOMICILIO_VENDEDOR, domicilio.ToString(), domicilio.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        private void btnVerObservacionTelefono_Click(Object sender, EventArgs e)
        {
            if (bsDomicilios.Current != null)
            {
                var telefono = ((Telefono)bsTelefonos.Current);
                if (telefono.TieneObservacion)
                {
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.TELEFONO_VENDEDOR, telefono.ToString(), telefono.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        private void btnAceptar_Click(Object sender, EventArgs e)
        {
            try
            {
                var ok = true;
                errVendedores.Clear();
                if (!String.IsNullOrWhiteSpace(mskCuit.Text) && !Validaciones.ValidarCuitCuil(Convert.ToInt64(mskCuit.Text)))
                {
                    ok = false;
                    errVendedores.SetError(mskCuit, "El C.U.I.T ingresado no es valido");
                }
                if (String.IsNullOrWhiteSpace(txtCodigo.Text))
                {
                    ok = false;
                    errVendedores.SetError(txtCodigo, DatosComunes.CompletarCampo);
                }
                if (String.IsNullOrWhiteSpace(txtNombre.Text))
                {
                    ok = false;
                    errVendedores.SetError(txtNombre, DatosComunes.CompletarCampo);
                }
                if (ucRubroVendedor.cboRubrosVendedores.SelectedIndex == -1)
                {
                    ok = false;
                    errVendedores.SetError(ucRubroVendedor, DatosComunes.CompletarCampo);
                }
                if (cboTipoComisionVendedor.SelectedIndex == -1)
                {
                    ok = false;
                    errVendedores.SetError(cboTipoComisionVendedor, DatosComunes.CompletarCampo);
                }
                if (cboTipoMensajeriaInstantanea.SelectedIndex == -1)
                {
                    ok = false;
                    errVendedores.SetError(cboTipoMensajeriaInstantanea, DatosComunes.CompletarCampo);
                }
                if (ok == true)
                {
                    presentador.Aceptar();
                    DialogResult = DialogResult.OK;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnCancelar_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void btnDomiciliosNuevo_Click(Object sender, EventArgs e)
        {
            var domiciliosAltaModificacion = new DomiciliosAltaModificacion(EnumTipoEntidad.DOMICILIO_VENDEDOR);
            domiciliosAltaModificacion.MinimizeBox = false;
            domiciliosAltaModificacion.MaximizeBox = false;
            if (domiciliosAltaModificacion.ShowDialog() == DialogResult.OK)
                bsDomicilios.Add(domiciliosAltaModificacion.DomicilioSeleccionado);
        }

        private void btnDomiciliosModificar_Click(Object sender, EventArgs e)
        {
            if (bsDomicilios.Current != null)
            {
                var domiciliosAltaModificacion = new DomiciliosAltaModificacion(EnumTipoEntidad.DOMICILIO_VENDEDOR, (Domicilio)bsDomicilios.Current);
                domiciliosAltaModificacion.MinimizeBox = false;
                domiciliosAltaModificacion.MaximizeBox = false;
                if (domiciliosAltaModificacion.ShowDialog() == DialogResult.OK)
                {
                    bsDomicilios.List[bsDomicilios.Position] = domiciliosAltaModificacion.DomicilioSeleccionado;
                    grdDomicilios.Refresh();
                }
            }
        }

        private void btnDomiciliosEliminar_Click(Object sender, EventArgs e)
        {
            if (bsDomicilios.Current != null)
            {
                if (MessageBox.Show("¿Esta seguro que desea eliminar el domicilio seleccionado?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    bsDomicilios.RemoveCurrent();
            }
        }

        private void btnTelefonosNuevo_Click(Object sender, EventArgs e)
        {
            var telefonosAltaModificacion = new TelefonosAltaModificacion(EnumTipoEntidad.TELEFONO_VENDEDOR);
            telefonosAltaModificacion.MinimizeBox = false;
            telefonosAltaModificacion.MaximizeBox = false;
            if (telefonosAltaModificacion.ShowDialog() == DialogResult.OK)
                bsTelefonos.Add(telefonosAltaModificacion.TelefonoSeleccionado);
        }

        private void btnTelefonosModificar_Click(Object sender, EventArgs e)
        {
            if (bsTelefonos.Current != null)
            {
                var telefonosAltaModificacion = new TelefonosAltaModificacion(EnumTipoEntidad.TELEFONO_VENDEDOR, (Telefono)bsTelefonos.Current);
                telefonosAltaModificacion.MinimizeBox = false;
                telefonosAltaModificacion.MaximizeBox = false;
                if (telefonosAltaModificacion.ShowDialog() == DialogResult.OK)
                {
                    bsTelefonos.List[bsTelefonos.Position] = telefonosAltaModificacion.TelefonoSeleccionado;
                    grdTelefonos.Refresh();
                }
            }
        }

        private void btnTelefonosEliminar_Click(Object sender, EventArgs e)
        {
            if (bsTelefonos.Current != null)
            {
                if (MessageBox.Show("¿Esta seguro que desea eliminar el telefono seleccionado?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    bsTelefonos.RemoveCurrent();
            }
        }

        private void VendedoresAltaModificacion_Load(Object sender, EventArgs e)
        {
            try
            {
                cboTipoComisionVendedor.ActualizarListado();
                cboTipoComisionVendedor.SelectedValue = (Byte)EnumTipoComisionVendedor.SIN_COMISION;
                cboTipoMensajeriaInstantanea.ActualizarListado();
                cboTipoMensajeriaInstantanea.SelectedValue = (Byte)EnumTipoMensajeriaInstantanea.NO_UTILIZA;
                ucRubroVendedor.ActualizarListado();
                ucRubroVendedor.cboRubrosVendedores.SelectedValue = (Int32)EnumRubroVendedor.RUBRO_UNICO;
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void cboTipoMensajeriaInstantanea_SelectedValueChanged(Object sender, EventArgs e)
        {
            if (cboTipoMensajeriaInstantanea.SelectedValue != null)
            {
                if ((Byte)cboTipoMensajeriaInstantanea.SelectedValue == (Byte)EnumTipoMensajeriaInstantanea.NO_UTILIZA)
                    txtMensajeriaInstantanea.Enabled = false;
                else
                    txtMensajeriaInstantanea.Enabled = true;
            }
        }

        private void cboTipoComisionVendedor_SelectedValueChanged(Object sender, EventArgs e)
        {
            if (cboTipoComisionVendedor.SelectedValue != null)
            {
                switch ((Byte)cboTipoComisionVendedor.SelectedValue)
                {
                    case (Byte)EnumTipoComisionVendedor.SIN_COMISION:
                        {
                            numComision.Enabled = false;
                            numComisionMaxima.Enabled = false;
                            break;
                        }
                    case (Byte)EnumTipoComisionVendedor.PORCENTAJE_DE_VENTA:
                    case (Byte)EnumTipoComisionVendedor.PORCENTAJE_DE_LA_GANANCIA:
                        {
                            numComision.Enabled = true;
                            numComisionMaxima.Enabled = true;
                            break;
                        }
                    case (Byte)EnumTipoComisionVendedor.MONTO_FIJO:
                        {
                            numComision.Enabled = true;
                            numComisionMaxima.Enabled = false;
                            break;
                        }
                }
            }
        }

        private void btnImagenAgregar_Click(Object sender, EventArgs e)
        {
            if (dlgImagen.ShowDialog() == DialogResult.OK && dlgImagen.FileName != String.Empty)
                picImagen.Load(dlgImagen.FileName);
        }

        private void btnImagenQuitar_Click(Object sender, EventArgs e)
        {
            if (picImagen.Image != null && MessageBox.Show("¿Está seguro que desea quitar la imagen actual?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                picImagen.Image = null;
        }

        private void grdDomicilios_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == colDomicilioObservacion.Index)
            {
                if (((DomicilioVendedor)bsDomicilios.List[e.RowIndex]).TieneObservacion)
                    e.Value = Properties.Resources.page_copy;
            }
        }

        private void grdTelefonos_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == colTelefonoObservacion.Index)
            {
                if (((TelefonoVendedor)bsTelefonos.List[e.RowIndex]).TieneObservacion)
                    e.Value = Properties.Resources.page_copy;
            }
        }

        private void grdDomicilios_CellContentClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (e.ColumnIndex == colDomicilioObservacion.Index)
                {
                    var domicilio = ((DomicilioVendedor)bsDomicilios.List[e.RowIndex]);
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.DOMICILIO_VENDEDOR, domicilio.ToString(), domicilio.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        private void grdTelefonos_CellContentClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (e.ColumnIndex == colTelefonoObservacion.Index)
                {
                    var telefono = ((TelefonoVendedor)bsTelefonos.List[e.RowIndex]);
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.TELEFONO_VENDEDOR, telefono.ToString(), telefono.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        #endregion
    }
}